treeview: Ensure selection's changed signal
authorBenjamin Otte <otte@redhat.com>
Sat, 10 Dec 2011 06:54:34 +0000 (07:54 +0100)
committerBenjamin Otte <otte@redhat.com>
Sat, 10 Dec 2011 07:00:26 +0000 (08:00 +0100)
There was a corner case where the changed signal was not emitted.
If rows were built like this:
  1    (not selected)
  + 2  (selected)
  + 3  (not selected)
And row 1 was removed, no signal would be emitted.

I like it when writing tests actually finds bugs that have been around
since 2003 - introduced by 4a03ea2334bde7d2e15d0933c5a78f5a2338a854
actually. :)

gtk/gtktreeview.c

index 2c3b00a768ead1a1c3a3ca8c277c912736408013..d0baa4576b8a62ebe8d4b018265a6d6765a94168 100644 (file)
@@ -8967,7 +8967,7 @@ check_selection_helper (GtkRBTree *tree,
 {
   gint *value = (gint *)data;
 
-  *value = GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED);
+  *value |= GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED);
 
   if (node->children && !*value)
     _gtk_rbtree_traverse (node->children, node->children->root, G_POST_ORDER, check_selection_helper, data);